<?php
/**
 * 模板替换变量
 */
$template = '
<html>
<body style="">
<h1>欢迎，{$name}！</h1>
<p>您的注册信息：</p>
<ul>
    <li>用户名：{$username}</li>
    <li>邮箱：{$email}</li>
    <li>邮箱：{$gender}</li>
    <li>注册时间：{$register_time}</li>
</ul>
<p>验证链接：<a href="{$verify_link}">点击验证</a></p>
</body>
</html>
';

$data = [
    'name' => 'tom',
    'username' => 'blues li',
    'email' => 'qq@qq.com',
    'register_time' => date('Y-m-d H:i:s'),
    'verify_link' => 'https://example.com/verify?token='
];


// 方式一 使用 strtr
$replacements = [];
foreach ($data as $key => $value) {
    $replacements['{$' . $key . '}'] = $value;
}
$result = strtr($template, $replacements);

// 方式二：使用 preg_replace_callback
//$result =preg_replace_callback('/\{\$(\w+)\}/', function($m) use ($data) {
//    return $data[$m[1]] ?? '';
//}, $template);

//
echo  $result;

//方式三 使用 eval 将字符串中的变量解析出来
extract($data);
$result = @eval('return "' . addslashes($template) . '";');
echo $result;